﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgParroquia
    {
        /// <summary>
        /// Declaracion de Variables
        /// </summary>
        SIPDataContext dc = new SIPDataContext();
        List<dtoParroquia> _parroquia = new List<dtoParroquia>();
        dtoError _resp = new dtoError();
        tblParroquia _tbparroquia = new tblParroquia();

        public mgParroquia()
        {

        }

        /// <summary>
        /// Metodo para encargado para el registro y modificación de parroquias.
        /// </summary>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public dtoError AceptarParroquia(dtoParroquia parroquia, int evento)
        {

            _tbparroquia.id_parroquia = parroquia.IdParroquia;
            _tbparroquia.descripcion = parroquia.Descripcion;
            _tbparroquia.id_diocesis = parroquia.IdDiocesis;
            _tbparroquia.id_provincia = parroquia.IdProvincia;
            _tbparroquia.id_canton = parroquia.IdCanton;
            _tbparroquia.telefono = parroquia.Telefono;
            _tbparroquia.fax = parroquia.Fax;
            _tbparroquia.apartado = parroquia.Apartado;
            _tbparroquia.direccion = parroquia.Direccion;
            _tbparroquia.activo = parroquia.Estado;
            _tbparroquia.email = parroquia.Email;
            try
            {
                _resp = ExisteParroquia(parroquia);
                if ((_resp.IdError == -101) && (evento == 1)) //No existe el registro y se procede a ingresarlo
                {
                    dc.tblParroquias.InsertOnSubmit(_tbparroquia);
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;
                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información de la parroquia ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2))// Se modifica los registros de la parroquia
                {
                    tblParroquia param = dc.tblParroquias.Single(p => p.id_parroquia == parroquia.IdParroquia);
                    param.descripcion = parroquia.Descripcion;
                    param.telefono = parroquia.Telefono;
                    param.fax = parroquia.Fax;
                    param.apartado = parroquia.Apartado;
                    param.direccion = parroquia.Direccion;
                    param.email = parroquia.Email;
                    param.activo = parroquia.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información modificada correctamente.";
                    _resp.IdError = 100;
                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        /// <summary>
        /// Método encargado de inactivar la parroquia.
        /// </summary>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public dtoError InactivarParroquia(dtoParroquia parroquia)
        {
            try
            {
                _tbparroquia = dc.tblParroquias.Single(p => p.id_parroquia == parroquia.IdParroquia);
                _tbparroquia.activo = parroquia.Estado;
                dc.SubmitChanges();
                _resp.Mensaje = "Parroquia inactivada correctamente.";
                _resp.IdError = 100;
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo para verificar la existencia de la parroquia en la tabla tblParroquia
        /// </summary>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public dtoError ExisteParroquia(dtoParroquia parroquia)
        {
            var condicion = (from p in dc.tblParroquias 
                             where p.id_parroquia == parroquia.IdParroquia
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "La parroquia ya existe en la tabla de Parroquias";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "La parroquia no existe en la tabla de Parroquias";
            }
            return _resp;
        }


        /// <summary>
        /// // Obtiene la parroquia que se va a mostrar en el combo al seleccionarse la Diócesis relacionada
        /// </summary>
        /// <param name="parroquia"></param>
        /// <returns></returns>

        public List<dtoParroquia> ObtenerParroquiaxDiocesis(dtoParroquia parroquia) 
        {
            int i = 0;
          
            try
            {
                var condicion = (from p in dc.tblParroquias
                                 where p.id_diocesis == parroquia.IdDiocesis && p.activo == true 
                                 select p).ToList();
                {
                    foreach (tblParroquia parr in condicion)
                    {
                        _parroquia.Add(new dtoParroquia());
                        _parroquia[i].IdParroquia = parr.id_parroquia;
                        _parroquia[i].Descripcion = parr.descripcion;
                       i++;

                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _parroquia;

        }

        /// <summary>
        /// Metodo para obtener la parroquia que se va a mostrar en la pantalla del mantenimiento de Parroquias
        /// para el evento de modificar
        /// </summary>
        /// <param name="_valor"></param>
        /// <returns></returns>
        public List<dtoParroquia> ObtenerParroquias(int _valor) 
        {
            int i = 0;
            try
            {
                var parroquias = (from p in dc.tblParroquias
                                  where p.id_parroquia == _valor
                                  orderby p.id_parroquia
                                  select p).ToList();

                    foreach (tblParroquia parr in parroquias)
                    {
                        _parroquia.Add(new dtoParroquia());
                        _parroquia[i].IdParroquia = parr.id_parroquia;
                        _parroquia[i].Descripcion = parr.descripcion;
                        _parroquia[i].Direccion = parr.direccion;
                        _parroquia[i].IdCanton = parr.id_canton;
                        _parroquia[i].IdDiocesis = parr.id_diocesis;
                        _parroquia[i].IdProvincia = parr.id_provincia;
                        _parroquia[i].Fax = parr.fax;
                        _parroquia[i].Apartado = parr.apartado;
                        _parroquia[i].Telefono = parr.telefono;
                        _parroquia[i].Email = parr.email;
                        _parroquia[i].Estado = Convert.ToBoolean(parr.activo);
                        i++;
                    }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _parroquia;

        }


        /// <summary>
        /// Metodo para obtener la lista de todas las parroquias activas e inactivas que se mostrarán para cargar el grid
        /// </summary>
        /// <param></param>
        /// <returns></returns>
        public List<dtoParroquia> ObtenerTodasParroquias() // 
        {
            int i = 0;
            try
            {
                var parroquias = (from p in dc.tblParroquias
                                  select p).ToList();
                    
                foreach (tblParroquia parr in parroquias)
                    {
                        _parroquia.Add(new dtoParroquia());
                        _parroquia[i].IdParroquia = parr.id_parroquia;
                        _parroquia[i].Descripcion = parr.descripcion;
                        _parroquia[i].Direccion = parr.direccion;
                        _parroquia[i].IdCanton = parr.id_canton;
                        _parroquia[i].IdDiocesis = parr.id_diocesis;
                        _parroquia[i].IdProvincia = parr.id_provincia;
                        _parroquia[i].Fax = parr.fax;
                        _parroquia[i].Apartado = parr.apartado;
                        _parroquia[i].Telefono = parr.telefono;
                        _parroquia[i].Email = parr.email;
                        _parroquia[i].Estado = Convert.ToBoolean(parr.activo);
                        i++;
                    }
              
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _parroquia;

        }



    }

}
